home *** CD-ROM | disk | FTP | other *** search
/ Programming Sound Cards / Programming Sound Cards.iso / sound_30 / notes.c < prev    next >
C/C++ Source or Header  |  1995-01-01  |  2KB  |  73 lines

  1. #include "midi.h"
  2. #include <stdio.h>
  3. /* 
  4. Copright 1988, G.E.S. Consulting
  5.  
  6. NORMAL MODE tutorial, WANT_TO_SEND_DATA
  7.  
  8. Read a file, make Midi events out of the data, use want_to_send_data() 
  9.     to play them.
  10. */
  11. main(ac,av)
  12. char **av;
  13.     {
  14.     int i,v,l;
  15.     FILE *f;
  16.     if (f=fopen(av[1],"rb")) /* if there is a file */
  17.         {
  18.         mpu_init(); /* install the driver, NOTE: no need to init_event_list()
  19.                      for this program, since we won't be reading anything from
  20.                      the MPU */
  21.         reset_mpu(); /* get to known state */
  22.         
  23.         /* stuff can sound pretty funky */
  24.         
  25.         printf("Press a key when you can't take it anymore!\n");
  26.         
  27.         /* get three chars to a clump */
  28.         
  29.         while((i=getc(f)) != EOF && 
  30.             (v = getc(f)) != EOF &&
  31.             (l = getc(f)) != EOF)
  32.             {
  33.             /* keep values in range */
  34.             i &= 0x7f; /* i == note value, v = velocity, l = duration */
  35.             v &= 0x7f;
  36.             if (i < 21 || i > 108)
  37.                 continue; /* skip unplayable notes */
  38.             play_note(i,v,l);
  39.             if (kbhit()) /* user couldn't stand it */
  40.                 {
  41.                 getch();
  42.                 break;
  43.                 }
  44.             }
  45.         mpu_close(); /* Uninstall Driver */
  46.         }
  47.     }
  48.  
  49. play_note(x,v,l)
  50.     {
  51.     int i;
  52.     unsigned char buf[3];
  53.     
  54.     /* set up a Channel 1 NOTE ON Midi Message */
  55.     
  56.     buf[0] = 0x90; /* midi note on  CH 1*/
  57.     buf[1] = x;  /* note value */;
  58.     buf[2] = v /* velocity */;
  59.     
  60.     want_to_send_data(0,buf,3); /* send on midi track 1 */
  61.     
  62.     /* leave it on a while */
  63.     while(l--)
  64.         for (i = 0; i < 200; i++)
  65.         ; /* let it sound a bit */
  66.     
  67.     /* make a NOTE OFF event */
  68.     
  69.     buf[2] = 0; /* velocity 0 == NOTE OFF */
  70.     
  71.     want_to_send_data(0,buf,3); /* send on midi track 1 */
  72.     }
  73.